package chapter07;

import java.util.concurrent.ArrayBlockingQueue;

public class Java10_Collection_Queue {
    public static void main(String[] args) throws Exception{
        // TODO 集合 - Queue
        // ArrayBlockingQueue = Array + Blocking(阻塞) + Queue
        ArrayBlockingQueue queue = new ArrayBlockingQueue(3);
        // add方法如果增加数据增加不了会直接报错
//        queue.add("zhangsan");
//        queue.add("lisi");
//        queue.add("wangwu");
//        queue.add("zhaoliu");   报错：java.lang.IllegalStateException: Queue fulljava.lang.IllegalStateException: Queue full (queue已满了)

//        queue.put("zhangsan");
//        System.out.println("第一人");
//        queue.put("lisi");
//        System.out.println("第二人");
//        queue.put("wangwu");
//        System.out.println("第三人");
//        // 发生阻塞（Blocking）
//        queue.put("zhaoliu");
//        System.out.println("第四人");

        boolean zhangsan = queue.offer("zhangsan");
        System.out.println("zhangsan = " + zhangsan);   // zhangsan = true

        boolean lisi = queue.offer("lisi");
        System.out.println("lisi = " + lisi);   // lisi = true

        boolean wangwu = queue.offer("wangwu");
        System.out.println("wangwu = " + wangwu);   // wangwu = true

        boolean zhaoliu = queue.offer("zhaoliu");
        System.out.println("zhaoliu = " + zhaoliu); // zhaoliu = false
        System.out.println("-----------------------");

        System.out.println(queue);  // [zhangsan, lisi, wangwu]
        System.out.println("-----------------------");

        // 获取数据
//        System.out.println(queue.poll());   // zhangsan
//        System.out.println(queue);  // [zhangsan, lisi, wangwu]
//
//        System.out.println(queue.poll());   // lisi
//        System.out.println(queue);  // [wangwu]
//
//        System.out.println(queue.poll());   // wangwu
//        System.out.println(queue);  // []
//
//
//        System.out.println(queue.poll());   // null
//        System.out.println(queue);  // []

        System.out.println(queue.take());   // zhangsan
        System.out.println(queue.take());   // lisi
        System.out.println(queue.take());   // wangwu
        System.out.println(queue.take());   // 程序阻塞，处于等待状态


    }
}
